home *** CD-ROM | disk | FTP | other *** search
/ Wonky Flux Batch 2019 02 / Wonky_Flux_Batch_2019-02.zip / Wonky Flux Batch 2019-02 / 077 - MousePaint Drawing Program - 68C-3005-A - 1984.dsk / INTRO / MOUSE.INTRO.bas < prev    next >
BASIC Source File  |  2019-02-17  |  21KB  |  445 lines

  1. 5  GOTO 3000
  2. 10 DT = 0:D9 = 0:NR = 0: GOSUB 100
  3. 15 OX = X:OY = Y: INPUT "";X,Y,B
  4. 17 B =  ABS(B)
  5. 22  IF X >XL  THEN X = XL
  6. 26  IF Y >YL  THEN Y = YL
  7. 30  ON T9 GOSUB 200,250,300,350,400,450,500
  8. 40  IF (X = OX)  AND (Y = OY)  THEN 75
  9. 45  POKE DB +18,64: CALL ADDR +9
  10. 50  IF X >255  THEN 60
  11. 55  POKE DB,X: POKE DB +1,0: GOTO 65
  12. 60  POKE DB,X -256: POKE DB +1,1
  13. 65  POKE DB +2,Y: POKE DB +18,128: CALL ADDR +9
  14. 70  POKE DB +18,0: CALL ADDR +9
  15. 75  IF D9  THEN 90
  16. 80  GOTO 15
  17. 90  ON T8 GOSUB 950,970
  18. 92 PX = X:PY = Y
  19. 95  PRINT D$;"IN#0": VTAB 1
  20. 99  RETURN 
  21. 100  PRINT D$;"IN#";S4: RETURN 
  22. 170  GOSUB 1850: GOSUB 100:T8 = 1: GOSUB 90:T8 = 0: GOSUB 1800: RETURN 
  23. 200 NR = NR +1:DT = DT + ABS(OX -X) + ABS(OY -Y)
  24. 205  IF  PEEK( -16384) <127  THEN 220
  25. 210 D9 =  PEEK( -16384): POKE  -16368,0:D9 = (D9 = 141): IF D9  THEN  RETURN 
  26. 220 D9 = (NR >550): IF D9  THEN NR =  -1: RETURN 
  27. 230  RETURN 
  28. 250  GOSUB 1600:D9 = (SH = 3)
  29. 255  IF D9  THEN 270
  30. 260 NR = NR +1:D9 = (NR >100)
  31. 265  IF D9  THEN NR =  -1
  32. 270  RETURN 
  33. 300 D9 = (B <3)  OR (NR >100)
  34. 310  RETURN 
  35. 350 D9 = (B <3): RETURN 
  36. 400 NR = NR +1:DT = DT + ABS(X -OX) + ABS(Y -OY):D9 = (B >2): RETURN 
  37. 450  GOSUB 1600:D9 = (SH = 2): RETURN 
  38. 500 D9 = (B >2)
  39. 510 OB = BOX:OS = SUBMENU: IF (Y >MY)  AND (Y <MY +8)  THEN 700
  40. 515  IF (Y <MY)  THEN SU =  -1: GOTO 600
  41. 520  IF (BOX <0)  THEN 800
  42. 525 XT = ML(BOX,0): IF (X <XT *7)  OR (X >(XT +ML(BOX,1)) *7)  THEN SU =  -1: GOTO 600
  43. 530 SU =  INT((Y -(MY +1))/8): IF (SU < = 0)  OR (SU >3)  THEN SU =  -1: GOTO 600
  44. 535  IF MT$(BOX,SU) = ""  THEN SU =  -1: GOTO 600
  45. 600  IF (SU = OS)  THEN 800
  46. 602  POKE DB +18,64: CALL ADDR +9
  47. 605  POKE 32,ML(BOX,0): POKE 33,ML(BOX,1): POKE 3092,2
  48. 610  IF (OS > = 0)  THEN  POKE 34,MR +OS: POKE 35,MR +OS +1: PRINT  CHR$(12);
  49. 620  IF (SU > = 0)  THEN  POKE 34,MR +SU: POKE 35,MR +SU +1: PRINT  CHR$(12);:VI(BOX,SU) = 1
  50. 630  POKE 3092,0: POKE DB +18,128: CALL ADDR +9: GOTO 800
  51. 700 XT =  INT(X/7):BOX =  -1: FOR I = 0 TO NB -1: IF (XT > = ML(I,0))  AND (XT <ML(I +1,0))  AND (BOX <0)  THEN BOX = I
  52. 705  NEXT 
  53. 710  IF BOX = OB  THEN 800
  54. 715  POKE DB +18,64: CALL ADDR +9
  55. 720  POKE 32,MC: POKE 33,39 -MC: POKE 34,MR +1: POKE 35,MR +MS +1: POKE 3092,1: PRINT  CHR$(12);: POKE 3092,0
  56. 725  POKE 34,MR: POKE 35,MR +1: POKE 3092,2
  57. 730  IF (OB > = 0)  THEN  POKE 32,ML(OB,0): POKE 33,ML(OB +1,0) -ML(OB,0): PRINT  CHR$(12);
  58. 735  IF (BOX <0)  THEN 770
  59. 740  POKE 32,ML(BOX,0): POKE 33,ML(BOX +1,0) -ML(BOX,0): PRINT  CHR$(12);: POKE 3092,0
  60. 745  POKE 34,MR +1: POKE 33,ML(BOX,1):J = 0: FOR I = 1 TO 3: IF MT$(BOX,I) < >""  THEN J = I
  61. 750  NEXT : POKE 35,MR +J +1: PRINT  CHR$(12);: FOR I = 1 TO J: PRINT MT$(BOX,I): NEXT 
  62. 760 VI(BOX,0) = 1
  63. 770 SU =  -1: POKE DB +18,128: CALL ADDR +9
  64. 800  RETURN 
  65. 950  INPUT "";X1,Y1,B1: IF  ABS(B1) <3  THEN 950
  66. 960  RETURN 
  67. 970  GOSUB 1800: IF (BOX <0)  THEN  RETURN 
  68. 972  POKE 3092,2: POKE 32,ML(BOX,0): POKE 33,ML(BOX +1,0) - PEEK(32): POKE 34,MR: POKE 35,MR +1: PRINT  CHR$(12);: POKE 3092,0
  69. 975  GOSUB 52130
  70. 980  RETURN 
  71. 1600 SH = (X >SX)  AND (X <SX +21)  AND (Y >SY)  AND (Y <SY +21): IF SH  THEN  RETURN 
  72. 1610 SH = (X >TX +3)  AND (X <TX +18)  AND (Y >TY)  AND (Y <TY +11): IF SH  THEN SH = 2: RETURN 
  73. 1620 SH = (X >CX)  AND (X <CX +21)  AND (Y >CY)  AND (Y <CY +21): IF SH  THEN SH = 3: RETURN 
  74. 1630 SH = (X >BX -3)  AND (X <BX +L *7 +3)  AND (Y >BY -3)  AND (Y <BY +12): IF SH  THEN SH = 4: RETURN 
  75. 1640  RETURN 
  76. 1650  IF X >256  THEN  POKE DB,X -256: POKE DB +1,1: GOTO 1670
  77. 1660  POKE DB,X: POKE DB +1,0
  78. 1670  POKE DB +2,Y: POKE DB +3,0: RETURN 
  79. 1700  REM    SET UP AN ICON
  80. 1710  POKE DB +19,MASK: CALL ADDR +6
  81. 1720  POKE DB +19,IKE: CALL ADDR +3
  82. 1730 XL = 279 - PEEK(DB +8) *7:YL = 191 - PEEK(DB +6)
  83. 1740  IF X >255  THEN  POKE DB,X -256: POKE DB +1,1: GOTO 1760
  84. 1750  POKE DB,X: POKE DB +1,0
  85. 1760  POKE DB +2,Y: POKE DB +3,0
  86. 1770  POKE DB +18,128: CALL ADDR +9: REM  SAVE
  87. 1780  POKE DB +18,0: CALL ADDR +9: REM    PLOT
  88. 1790  RETURN 
  89. 1800  REM    ERASE POINTER
  90. 1810  POKE DB +18,64: CALL ADDR +9:PX = X:PY = Y
  91. 1820  RETURN 
  92. 1850  REM    RESTORE POINTER
  93. 1860 X = PX:Y = PY:IKE = 7:MASK = 11: GOSUB 1700
  94. 1870  RETURN 
  95. 1900  REM  Jump to marker
  96. 1910  POKE A9 +8,RN: FOR I8 = 0 TO 2: POKE A9 +9 +I8,M9(I9,I8): NEXT : CALL A9 +3
  97. 1920  RETURN 
  98. 2000  GOSUB 1800:X = DX:Y = DY:IKE = DI:MASK = DM: POKE DB +19,MASK: CALL ADDR +6: POKE DB +19,IKE: CALL ADDR +3
  99. 2010  CALL ADDR +15: GOSUB 1650
  100. 2015  POKE DB +18,64: CALL ADDR +9
  101. 2020  PRINT  CHR$(14);: GOSUB 1720:X = DX:Y = DY: GOSUB 59400: RETURN 
  102. 2100  CALL ADDR +12: PRINT  CHR$(18);: GOSUB 1780
  103. 2110 DX = X:DY = Y:PX = X +4:PY = Y +4: GOSUB 1850: RETURN 
  104. 2150 L =  LEN(SV$(1)): POKE 32,CC: POKE 33,L: POKE 34,CR: POKE 35,CR +1: PRINT  CHR$(12);SV$(1)
  105. 2160 BX = CC *7:BY = CR *8 -1: HPLOT BX,BY TO BX +L *7,BY TO BX +L *7,BY +9 TO BX,BY +9 TO BX,BY
  106. 2165  POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,10: RETURN 
  107. 2170  POKE 32,CC -1: POKE 33,L +2: POKE 34,CR -1: POKE 35,CR +2: POKE 3092,1: PRINT  CHR$(12);: POKE 3092,0: GOSUB 57000:BX =  -1:BY =  -1:L = 0: RETURN 
  108. 2200  IF (SU <0)  OR (BOX <0)  OR (BOX > = NB)  THEN 2270
  109. 2220  IF (BOX = 0)  THEN 2240
  110. 2230 FI = 3 +SU:IKE = FI:MASK = 10:X = CX:Y = CY: GOSUB 1700: GOTO 2270
  111. 2240  IF (FR)  AND (SU = 2)  THEN FR = 0: GOSUB 2400: GOTO 2260
  112. 2250 X = SX:Y = TY -RR:IKE = 9:MASK = 9: PRINT  CHR$(14);: GOSUB 1700: PRINT  CHR$(18);
  113. 2260 RR = (8 *(SU -1)):X = SX:Y = TY -RR:IKE = 2: GOSUB 1700
  114. 2270  GOSUB 1850: RETURN 
  115. 2400 X = SX: FOR I = 0 TO 8:Y = TY -I:IKE = 9:MASK = 9: PRINT  CHR$(14);: GOSUB 1700
  116. 2410 IKE = 2: GOSUB 1700: PRINT  CHR$(18);: GOSUB 1700
  117. 2420  NEXT : RETURN 
  118. 3000  ONERR  GOTO 62100
  119. 3001  DIM M9(5,2),SV$(5),SN(5),MT$(2,3),ML(3,1),VI(2,3)
  120. 3002  IF  PEEK(104) < >64  THEN  POKE 16384,0: POKE 104,64: POKE 103,1: PRINT  CHR$(4);"RUN MOUSE.INTRO"
  121. 3005  GOSUB 59000
  122. 3010  GOSUB 59100: GOSUB 53000
  123. 3015  POKE 34,10: POKE 3092,1: PRINT  CHR$(12);: POKE 3092,0
  124. 3020  GOSUB 57000
  125. 3025  PRINT  CHR$(12);
  126. 3030  HCOLOR= 3: FOR I = 0 TO 1: HPLOT I,80 +I TO 279 -I,80 +I TO 279 -I,191 -I TO I,191 -I TO I,80 +I: NEXT : HCOLOR= 0: PRINT  CHR$(18);:
  127. 3035  GOSUB 60200
  128. 3050 IKE = 0:MASK = 8:X = 15:Y = 125:SX = X:SY = Y: GOSUB 1700
  129. 3054 IKE = 2:MASK = 9:X = 45:TX = X:TY = Y: GOSUB 1700
  130. 3058 IKE = 3:MASK = 10:X = 75:CX = X:CY = Y: GOSUB 1700
  131. 3065 IKE = 7:MASK = 11:X = TX +4:Y = TY +20: GOSUB 1700
  132. 3070  GOSUB 59300: IF S4 = 0  THEN  TEXT : HOME : GOTO 9000
  133. 3072  IF S4 <0  THEN  TEXT : HOME : GOTO 9200
  134. 3075  GOSUB 59400
  135. 3100  VTAB 1:N$ = "INTROTEXT": GOSUB 54000: GOSUB 54100
  136. 3102 OX = X:OY = Y: PRINT D$;"IN#";S4
  137. 3105  FOR I = 0 TO 7: GOSUB 1800: FOR J = 0 TO 3
  138. 3110  INPUT "";X,Y,B: IF (X < >OX)  OR (Y < >OY)  THEN  GOSUB 1850:NR = 1: GOTO 3140
  139. 3115  NEXT : GOSUB 1850: FOR J = 0 TO 3
  140. 3120  INPUT "";X,Y,B: IF (X < >OX)  OR (Y < >OY)  THEN 3140
  141. 3130  NEXT : NEXT :TT = 0
  142. 3140 T9 = 1:T8 = 1: GOSUB 10
  143. 3145 I9 = 1: GOSUB 1900
  144. 3150 TT = TT +DT: IF TT >200  THEN 3180
  145. 3155  IF DT >0  THEN ND = 1: GOSUB 56000: GOTO 3170
  146. 3160 ND = 2: GOSUB 56000
  147. 3170  GOSUB 54100: GOSUB 3140
  148. 3180 GB = 0: GOSUB 1600: IF SH = 3  THEN ND = 6: GOSUB 56000:GB = 1: GOTO 3300
  149. 3190  GOTO 3200
  150. 3200  REM    Move into circle
  151. 3205 ND = 3: GOSUB 56000: GOSUB 54100
  152. 3210 T9 = 2:T8 = 1: GOSUB 10:I9 = 1: GOSUB 1900
  153. 3220  IF (NR <0)  THEN ND = 1: GOSUB 56000: GOSUB 54100: GOTO 3210
  154. 3230 ND = 2: GOSUB 56000
  155. 3300  REM    Now click button
  156. 3310  GOSUB 54100: IF   NOT GB  THEN ND = 1: GOSUB 56000
  157. 3320 T8 = 0: GOSUB 54100: GOTO 3330
  158. 3325  GOSUB 170
  159. 3330 X = PX:Y = PY: GOSUB 59400
  160. 3335 T9 = 3: GOSUB 10:I9 = 1: GOSUB 1900
  161. 3340  IF (B >2)  THEN ND = 2: GOSUB 56000: GOSUB 54100: GOTO 3330
  162. 3350  GOSUB 1600: IF SH < >3  THEN ND = 1: GOSUB 56000: GOSUB 54100: GOTO 3335
  163. 3370  GOSUB 1800
  164. 3380 PX = X:PY = Y:X = CX:Y = CY:IKE = 4:MASK = 10: GOSUB 1700
  165. 3390  GOSUB 170: GOSUB 1850: GOSUB 2150
  166. 3420  GOSUB 57000:ND = 3: GOSUB 56000: GOSUB 54100
  167. 3500  REM  Practise clicking
  168. 3505 CI = 1:TI = 1:SI = 1:L =  LEN(SV$(1)):NC = 0:ND = 1
  169. 3510 T9 = 4: GOSUB 10: GOSUB 1800
  170. 3520  GOSUB 1600: IF SH = 0  THEN 3590
  171. 3530  ON SH GOSUB 3540,3550,3560,3700: GOTO 3580
  172. 3540 SI =   NOT SI:I = SI:X = SX:Y = SY:IKE = 0:MASK = 8: RETURN 
  173. 3550 TI =   NOT TI:I = TI:X = TX:Y = TY:IKE = 2:MASK = 9: RETURN 
  174. 3560 CI =   NOT CI:I = CI:X = CX:Y = CY:IKE = 3 +CI:MASK = 10: RETURN 
  175. 3580  PRINT  CHR$(14 +4 *I): GOSUB 1700: PRINT  CHR$(18);
  176. 3585  PRINT  CHR$(14 +4 *I): GOSUB 1700: PRINT  CHR$(18);
  177. 3590  GOSUB 170: GOSUB 1850
  178. 3600  IF SH >0  THEN NC = NC +1
  179. 3610  IF NC = 8  THEN ND = 0: GOSUB 54100
  180. 3620  GOTO 3510
  181. 3700  GOSUB 2170: GOSUB 170
  182. 3720  IF   NOT SI  THEN  GOSUB 3540: GOSUB 1700
  183. 3730  IF   NOT TI  THEN  GOSUB 3550: GOSUB 1700
  184. 3740  IF   NOT CI  THEN  GOSUB 3560: GOSUB 1700
  185. 3745  GOSUB 1850
  186. 4000  REM  What a drag...
  187. 4005  GOSUB 56000: GOSUB 54100: CALL ADDR +18:T8 = 0
  188. 4010 T9 = 4: GOSUB 10: GOSUB 1600: IF SH = 2  THEN 4030
  189. 4015 I9 = 1: GOSUB 1900:ND = 1: GOSUB 56000: PRINT  CHR$(18);: GOSUB 54100
  190. 4020 T9 = 6: GOSUB 10: IF (B <3)  THEN 4030
  191. 4025  GOTO 4010
  192. 4030 DI = 2:DM = 9:DX = TX:DY = TY: GOSUB 2000
  193. 4040 T9 = 5: GOSUB 10: GOSUB 2100:I9 = 1: GOSUB 1900
  194. 4050 TX = DX:TY = DY:GB = 1
  195. 4070  IF (X >SX -9)  AND (X <SX +9)  AND (Y >SY -19)  AND (Y <SY)  THEN  PRINT  CHR$(18);: GOTO 4300
  196. 4090  IF (NR <5)  OR (DT <30)  THEN ND = 2: GOSUB 56000: PRINT  CHR$(18);: GOSUB 54100: GOTO 4010
  197. 4100  REM  Dragged, but not above square
  198. 4110 GB = 0:ND = 3: GOSUB 56000: PRINT  CHR$(18);: GOSUB 54100: GOSUB 54100:ND = 1: GOSUB 56000: GOSUB 54100
  199. 4120 T9 = 4: GOSUB 10: GOSUB 1610: IF SH < >2  THEN 4120
  200. 4130  GOSUB 2000:T9 = 5
  201. 4140  GOSUB 10: GOSUB 2100:TX = DX:TY = DY:I9 = 1: GOSUB 1900
  202. 4150  IF (X >SX -9)  AND (X <SX +9)  AND (Y >SY -19)  AND (Y <SY)  THEN ND = 2: GOSUB 56000: GOTO 4300
  203. 4160 ND = 1: GOSUB 56000: PRINT  CHR$(18);: GOSUB 54100: GOTO 4120
  204. 4300 X = DX:Y = DY:IKE = 9:MASK = 9: PRINT  CHR$(14);: GOSUB 1700: PRINT  CHR$(18);:
  205. 4310 A7 = 4864: POKE A7 +16, PEEK(A7 +16) -1: POKE A7 +65, PEEK(A7 +65) -1
  206. 4320 X = SX:Y = SY:IKE = 1:MASK = 8: GOSUB 1700
  207. 4330 X = SX:Y = SY -9:IKE = 2:MASK = 9: GOSUB 1700:TX = X:TY = Y
  208. 4335  POKE A7 +16, PEEK(A7 +16) +1: POKE A7 +65, PEEK(A7 +65) +1
  209. 4340 X = SX +5:Y = SY -5: GOSUB 1850
  210. 4350  GOSUB 2150: IF   NOT GB  THEN 4400
  211. 4360 ND = 3: GOSUB 56000: GOSUB 54100:ND = 1: GOSUB 56000: GOSUB 54100: GOSUB 54100
  212. 4380 T9 = 4:T8 = 0: GOSUB 10: GOSUB 1600: IF SH < >4  THEN 4380
  213. 4390 PX = X:PY = Y: GOSUB 2170: GOSUB 170
  214. 4400 I9 = 1: GOSUB 1900:ND = 2: GOSUB 56000: GOSUB 54100
  215. 4405  IF GB  THEN  GOSUB 2150: GOSUB 1850
  216. 4410 DI = 3:DM = 10:DX = CX:DY = CY: CALL ADDR +18
  217. 4420 T9 = 4:T8 = 0: GOSUB 10
  218. 4430  GOSUB 1620: IF SH = 4  THEN 4500
  219. 4435  IF SH < >3  THEN 4420
  220. 4440 DI = 3:T9 = 5:T8 = 0: GOSUB 2000: GOSUB 10
  221. 4450 DI = 4: POKE DB +19,DI: CALL ADDR +3: GOSUB 2100
  222. 4460 CX = DX:CY = DY: GOTO 4420
  223. 4500  REM  Introduce menus
  224. 4505 FR = 1: GOSUB 170: GOSUB 54100
  225. 4510  PRINT D$;"CLOSE ";N$:N$ = SV$(5): GOSUB 54000
  226. 4520 X = DX:Y = DY:IKE = 4:MASK = 10: POKE DB +19,MASK: CALL ADDR +6: POKE DB +19,IKE: CALL ADDR +3
  227. 4530  CALL ADDR +15: GOSUB 1650
  228. 4540  POKE DB +18,64: CALL ADDR +9:CX = 75:CY = SY:X = CX:Y = CY: GOSUB 1730: GOSUB 1850
  229. 4545  GOSUB 2170
  230. 4550  GOSUB 52200:FI = 4:RR = 0:TY = SY -9
  231. 4555  GOSUB 52000: GOSUB 54100:ND = 3: GOSUB 56000:ND = 1: FOR I = 1 TO 5: GOSUB 54100:ND = 1: GOSUB 56000: NEXT 
  232. 4560  GOSUB 52100: GOSUB 57000:GB = 0:I9 = 0: GOSUB 1900: GOSUB 54100: GOSUB 54100
  233. 4565  GOSUB 2150: GOSUB 1850:T9 = 4:T8 = 0
  234. 4570  GOSUB 10: GOSUB 1600: IF SH < >4  THEN 4570
  235. 4580  GOSUB 1800: GOSUB 2170: GOSUB 170: GOSUB 54100:GB = 1 -GB: IF GB  THEN 4565
  236. 4590  GOSUB 1850: GOSUB 52200: GOSUB 10:T9 = 7:T8 = 2: GOSUB 10: GOSUB 1600: GOSUB 2200
  237. 4595  GOSUB 57000:I9 = 1: GOSUB 1900: GOSUB 1800
  238. 4600  IF (BOX = 0)  AND (SU = 2)  THEN 5000
  239. 4610  IF VI(0,0)  OR VI(1,0)  THEN 4650
  240. 4615  IF SH = 2  THEN I9 = 1: GOTO 4700
  241. 4620 I9 = 2: GOTO 4700
  242. 4650  IF VI(1,0)  AND (  NOT VI(0,0))  THEN I9 = 5: GOTO 4700
  243. 4660  IF VI(0,2)  THEN I9 = 4: GOTO 4700
  244. 4670 I9 = 3
  245. 4700  GOSUB 57000: GOSUB 1900:ND = 1: GOSUB 56000: GOSUB 54100: GOTO 4590
  246. 5000  GOSUB 58000:I9 = 5: GOSUB 1900:ND = 2: GOSUB 56000: GOSUB 54100
  247. 5005  GOSUB 2150: GOSUB 1850
  248. 5010 T9 = 4:T8 = 0: GOSUB 10: GOSUB 1620: IF SH < >4  THEN 5010
  249. 5015  GOSUB 2170: GOSUB 170
  250. 5020  GOSUB 54100: GOSUB 52100: GOSUB 2150: GOSUB 1850
  251. 5030  GOSUB 52200: GOSUB 10:T9 = 7:T8 = 2: GOSUB 10: GOSUB 1600: GOSUB 2200
  252. 5040  IF SH < >4  THEN 5030
  253. 5050  GOSUB 2170: GOSUB 58000
  254. 5100  REM  Introduce put-away icon
  255. 5110  GOSUB 54100: GOSUB 2150: GOSUB 1850:T9 = 4:T8 = 0
  256. 5120  GOSUB 10: GOSUB 1600: IF SH < >4  THEN 5120
  257. 5130 PX = X:PY = Y: GOSUB 2170: GOSUB 170
  258. 5140  GOSUB 54100: GOSUB 59400: POKE 3092,2: POKE 32,2: POKE 33,3: POKE 34,12: POKE 35,13
  259. 5150 X = PX:Y = PY:NR = 0: GOSUB 1850: PRINT D$;"IN#";S4:OX = X:OY = Y
  260. 5160  PRINT  CHR$(12);: FOR J = 0 TO 9
  261. 5165  INPUT "";X,Y,B: IF (NR >1)  AND ((X < >OX)  OR (Y < >OY))  THEN  PRINT  CHR$(12);: GOTO 5200
  262. 5170  NEXT : PRINT  CHR$(12);: FOR J = 0 TO 9
  263. 5180  INPUT "";X,Y,B: IF (NR >1)  AND ((X < >OX)  OR (Y < >OY))  THEN 5200
  264. 5190  NEXT :X = OX:Y = OY:NR = NR +1: GOTO 5160
  265. 5200  GOSUB 57000: POKE 3092,0
  266. 5205 T9 = 4:T8 = 0: GOSUB 10
  267. 5210  IF (X >11)  AND (X <31)  AND (Y >92)  AND (Y <108)  THEN 5225
  268. 5215  GOSUB 1800
  269. 5220  GOSUB 57000:I9 = 1: GOSUB 1900:ND = 1: GOSUB 56000: GOSUB 54100: GOSUB 170: GOSUB 1850: GOTO 5205
  270. 5225  POKE 3092,1: POKE 32,1: POKE 33,16: POKE 34,11: POKE 35,23: PRINT  CHR$(12);: POKE 3092,0: GOSUB 57500: GOSUB 170
  271. 5230 CC = 4:CR = 12:SV$(5) = SV$(1):SV$(1) = SV$(2): GOSUB 2150
  272. 5240  GOSUB 57000:I9 = 1: GOSUB 1900:ND = 2: GOSUB 56000: GOSUB 54100
  273. 5250  GOSUB 1850:T9 = 4:T8 = 0
  274. 5260  GOSUB 10: GOSUB 1620: IF SH < >4  THEN 5260
  275. 5265 PX = X:PY = Y
  276. 5270  GOSUB 2170: GOSUB 60200
  277. 5280 IKE = 1:MASK = 8:X = SX:Y = SY: GOSUB 1700
  278. 5285 IKE = 9:MASK = 9:Y = TY: PRINT  CHR$(14);: GOSUB 1700: PRINT  CHR$(18);:IKE = 2:Y = TY -RR: GOSUB 1700
  279. 5290 IKE = FI:MASK = 10:X = CX:Y = CY: GOSUB 1700
  280. 5300  GOSUB 170: GOSUB 54100:GV = 0
  281. 5310 CC = 17:CR = 20:SV$(1) = SV$(5): GOSUB 2150: GOSUB 1850
  282. 5320 T9 = 4:T8 = 0: GOSUB 10: GOSUB 1620: IF SH < >4  THEN 5320
  283. 5325 PX = X:PY = Y
  284. 5330  GOSUB 2170: GOSUB 170: GOSUB 54100
  285. 5340 GV = GV +1: IF GV = 2  THEN 5400
  286. 5345  IF (GV < >1)  THEN 5310
  287. 5350 IKE = 4:MASK = 10: FOR I = 0 TO 9:X = 7 +I *25:Y = 20: GOSUB 1700: NEXT 
  288. 5360  GOTO 5310
  289. 5400  REM  Choose your path
  290. 5410  POKE 32,1: POKE 33,38: POKE 34,11: POKE 35,23: POKE 3092,1: PRINT  CHR$(12);: POKE 3092,0
  291. 5420  HCOLOR= 3: FOR I =  -2 TO 2: HPLOT 140 -I,82 TO 140 -I,189: NEXT : HCOLOR= 0
  292. 5425  POKE 32,2: POKE 33,16: POKE 34,12: POKE 35,18: PRINT  CHR$(12);: GOSUB 54110
  293. 5430  POKE 32,22: POKE 33,16: POKE 34,12: POKE 35,18: PRINT  CHR$(12);: GOSUB 54110
  294. 5440  GOSUB 57500
  295. 5450  GOSUB 1850:T9 = 4:T8 = 0: GOSUB 10
  296. 5460  IF (X <140)  THEN 5500
  297. 5470  GOTO 5600
  298. 5500  REM  Quit for now
  299. 5510  GOSUB 62000
  300. 5520  POKE 3092,0
  301. 5530  GOSUB 57500: PRINT  CHR$(14); CHR$(12)
  302. 5540  GOSUB 54100: PRINT D$;"CLOSE ";N$
  303. 5550  GOTO 5550
  304. 5600  REM  Go to mousepaint
  305. 5610  GOSUB 62000
  306. 5620  POKE 3092,0
  307. 5630  GOSUB 57500: PRINT  CHR$(14); CHR$(12)
  308. 5640 ND = 1: GOSUB 56000: GOSUB 54100
  309. 5645  PRINT D$;"CLOSE ";N$: PRINT D$;"PR#0": PRINT D$;"RUN MOUSEPAINT"
  310. 9000  PRINT D$;"IN#0": GOSUB 62000
  311. 9010  GOSUB 62050
  312. 9020  PRINT "YOU HAVE NO MOUSE CARD INSTALLED,"
  313. 9030  PRINT "OR YOUR MOUSE CARD IS IN SLOT THREE."
  314. 9100  VTAB 22: END 
  315. 9200  PRINT D$;"IN#0"
  316. 9210  GOSUB 62050
  317. 9220  PRINT "MOUSE CARD SHOULD NOT BE"
  318. 9230  PRINT "IN SLOT THREE. (BUT IT IS.)"
  319. 9240  VTAB 22: END 
  320. 51000  REM    HANDLE COMMANDS
  321. 51010  IF S$ < >"%p"  THEN 51100
  322. 51020  VTAB 1: HTAB 1: PRINT  CHR$(12);: RETURN 
  323. 51100  IF S$ < >"%m"  THEN 51200
  324. 51150  INPUT I9: POKE A9 +8,RN: CALL A9: FOR I8 = 0 TO 2:M9(I9,I8) =  PEEK(A9 +9 +I8): NEXT : RETURN 
  325. 51200  IF S$ < >"%s"  THEN 51400
  326. 51210  INPUT I9: INPUT SV$(I9):SN(I9) =  VAL(SV$(I9)): RETURN 
  327. 51400  IF S$ < >"%e"  THEN 51500
  328. 51450  PRINT  CHR$(29): RETURN 
  329. 51500  IF S$ < >"%r"  THEN 51600
  330. 51520  INPUT I9: VTAB I9: RETURN 
  331. 51600  IF S$ < >"%@"  THEN 51900
  332. 51650  INPUT I9,I8: VTAB I8: HTAB I9: RETURN 
  333. 51900  RETURN 
  334. 52000  REM   set up menu parameters
  335. 52002 MC = 17:MR = 12:TL = 38 -MC
  336. 52005  FOR I = 0 TO 3:ML(I,0) = MC: FOR J = 0 TO 2:MT$(J,I) = "": NEXT : NEXT 
  337. 52010  PRINT D$;"READ ";N$: INPUT NB:MS = 0
  338. 52020  FOR I = 0 TO NB -1: INPUT MT$(I,0):ML(I +1,0) =  LEN(MT$(I,0)) +ML(I,0)
  339. 52030  INPUT NS:K = 0: FOR J = 1 TO NS: INPUT MT$(I,J): IF  LEN(MT$(I,J)) >K  THEN K =  LEN(MT$(I,J))
  340. 52040  NEXT :ML(I,1) = K: IF NS >MS  THEN MS = NS
  341. 52050  NEXT : RETURN 
  342. 52100  REM  Display menu bar
  343. 52105  POKE 32,MC: POKE 33,TL: POKE 34,MR: POKE 35,MR +1: PRINT  CHR$(12);
  344. 52110  GOSUB 57500: VTAB MR +1: HTAB MC +1: FOR I = 0 TO NB -1: PRINT MT$(I,0);: NEXT 
  345. 52120 MX = MC *7 -1:MY = MR *8 -1: HPLOT MX,MY TO MX +TL *7,MY TO MX +TL *7,MY +8 TO MX,MY +8 TO MX,MY
  346. 52130  POKE 3092,1: POKE 32,MC: POKE 33,39 -MC: POKE 34,MR +1: POKE 35,MR +MS +1: PRINT  CHR$(12);: POKE 3092,0: GOSUB 57500
  347. 52140  RETURN 
  348. 52200  REM  Set up for entering menu
  349. 52210 BOX =  -1:SU =  -1:T9 = 4:T8 = 0: FOR I = 0 TO 2: FOR J = 0 TO 3:VI(I,J) = 0: NEXT : NEXT : RETURN 
  350. 53000  REM  Initialize variables
  351. 53010 D$ =  CHR$(4):ADDR = 3840:DBASE = 3888
  352. 53020 OX = 0:OY = 80:X = 0:Y = 80:XL = 272:YL = 189
  353. 53030 CC = 17:CR = 20:BY =  -1:BX =  -1:L = 0:B = 0
  354. 53040 SV$(2) = " Shapes "
  355. 53050  GOSUB 57500
  356. 53060 A8 = 6064
  357. 53900  RETURN 
  358. 54000  REM    OPEN FILE IN N$
  359. 54010  PRINT D$;"OPEN ";N$
  360. 54020  PRINT D$;"READ ";N$
  361. 54030 A9 = 4736: REM    $1280
  362. 54040  FOR I9 = 1 TO 7: POKE A9 +8,I9: CALL A9: IF  PEEK(A9 +6) = 0  THEN RN = I9
  363. 54050  NEXT 
  364. 54090  RETURN 
  365. 54100  REM  Do file
  366. 54105  PRINT  CHR$(14);
  367. 54110  PRINT D$;"READ ";N$
  368. 54120 S$ = "": INPUT S$
  369. 54130  IF S$ = ""  THEN 54200
  370. 54140  IF  LEFT$(S$,1) < >"%"  THEN 54200
  371. 54145  IF S$ = "%w"  THEN  GOTO 54900
  372. 54150  GOSUB 51000: GOTO 54120
  373. 54200  PRINT S$
  374. 54210  GOTO 54120
  375. 54900  PRINT  CHR$(18);: RETURN 
  376. 56000  REM    DISCARD <<N>>
  377. 56005  IF ND = 0  THEN 56900
  378. 56010  PRINT D$;"READ ";N$
  379. 56015  FOR I9 = 1 TO ND
  380. 56020 S$ = "": INPUT S$
  381. 56030  IF S$ < >"%w"  THEN 56020
  382. 56040  NEXT 
  383. 56900  RETURN 
  384. 57000  REM    SET WINDOW
  385. 57010  POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,10: RETURN 
  386. 57500  REM    FULL SCREEN
  387. 57510  POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,24: RETURN 
  388. 58000  REM  Erase menu bar
  389. 58010  POKE 3092,1: POKE 32,MC -1: POKE 33,39 -MC: POKE 34,MR -1: POKE 35,MR +1: PRINT  CHR$(12);: POKE 3092,0: GOSUB 57000: RETURN 
  390. 59000  REM    SET UP FILES
  391. 59010 D$ =  CHR$(4)
  392. 59020  PRINT D$;"BLOAD SYSTEM.CHARSET,A$800,L$400"
  393. 59030  PRINT D$;"BLOAD HIRES.TEXT.0"
  394. 59040  PRINT D$;"BLOAD ICON.STUFF.0"
  395. 59045  PRINT D$;"BLOAD MOUSE.STUFF.0,A$1200"
  396. 59050  PRINT D$;"BLOAD TABLE.FILE,A$1300"
  397. 59055  PRINT D$;"BLOAD MARK.STUFF.0,A$1280"
  398. 59070  RETURN 
  399. 59100  REM  Set up hi-res hooks
  400. 59110 D$ =  CHR$(4): PRINT D$;"PR#A$C00"
  401. 59120  PRINT  CHR$(12): HGR 
  402. 59130  POKE  -16302,0: REM    FULL SCREEN
  403. 59190  RETURN 
  404. 59300  REM  INITIALIZE MOUSE 
  405. 59310 A = 50944:S4 = 0: FOR I = 1 TO 7
  406. 59320  IF ( PEEK(A +12) = 32)  AND ( PEEK(A +251) = 214)  AND (S4 = 0)  THEN S4 = 8 -I
  407. 59325 A = A -256: NEXT : IF S4 = 0  THEN  RETURN 
  408. 59327  IF (S4 = 3)  AND ( PEEK( -1101) = 6)  THEN S4 =  -1: RETURN 
  409. 59330  POKE 1144,0: POKE 1400,0: POKE 1272,23: POKE 1528,1: POKE 4608,0
  410. 59335  POKE 4612,192 +S4: POKE 4613,S4 *16: CALL 4609
  411. 59340  PRINT D$;"PR#";S4: PRINT  CHR$(1)
  412. 59350  PRINT D$;"PR#A$C00"
  413. 59360  POKE 1144,0: POKE 1400,0: POKE 1272,23: POKE 1528,1: POKE 4608,0
  414. 59365  POKE 4612,192 +S4: POKE 4613,S4 *16: CALL 4609
  415. 59370  POKE 1144,80: POKE 1400,0: POKE 1272,191: POKE 1528,0: POKE 4608,1: CALL 4609
  416. 59380  POKE 4608,3: CALL 4609: REM             Read mouse
  417. 59390  RETURN 
  418. 59400  REM  Force mouse parameters
  419. 59410  IF X >255  THEN  POKE 1144 +S4,X = 256: POKE 1400 +S4,1: GOTO 59435
  420. 59430  POKE 1144 +S4,X: POKE 1400 +S4,0
  421. 59435  POKE 1272 +S4,Y: POKE 1528 +S4,0
  422. 59440  POKE 4608,2: CALL 4609
  423. 59450  RETURN 
  424. 60200  REM  Plot SHAPES box
  425. 60210  POKE 32,1: POKE 33,14: POKE 34,12: POKE 35,22: PRINT  CHR$(12)
  426. 60220  HPLOT 7,95 TO 105,95 TO 105,176 TO 7,176 TO 7,95: HPLOT 7,104 TO 105,104
  427. 60230  GOSUB 57500: VTAB 13: HTAB 3: PRINT  CHR$(16); CHR$(26); CHR$(16); CHR$(30);" "; CHR$(14);SV$(2); CHR$(18)
  428. 60240  GOSUB 57000
  429. 60250  RETURN 
  430. 62000  REM    TURN OFF MOUSE; END
  431. 62010  PRINT D$;"IN#0":
  432. 62020  PRINT D$;"PR#";S4: PRINT  CHR$(0)
  433. 62040  PRINT D$;"IN#0": PRINT D$;"PR#A$C00"
  434. 62045  RETURN 
  435. 62050  PRINT D$;"CLOSE": PRINT D$;"PR#0"
  436. 62060  RETURN 
  437. 62100  REM    ERROR HANDLING
  438. 62105  POKE 216,0
  439. 62110  GOSUB 62000: GOSUB 62050: TEXT 
  440. 62120  HOME :I =  PEEK(218) + PEEK(219) *256:J =  PEEK(222)
  441. 62125  IF J = 255  THEN  PRINT "OOPS. YOU PRESSED CONTROL-C.": GOTO 62135
  442. 62130  PRINT "ERROR ";J;" IN LINE ";I
  443. 62135  PRINT : PRINT "PLEASE PRESS CONTROL-RESET": PRINT "TO START OVER."
  444. 62140 D$ =  CHR$(4): PRINT D$;"CLOSE"
  445. 62150  GOTO 62150